Replication of software applications using state-of-the-art Virtual Machine (VM) platforms and technologies is a very powerful and flexible way of providing high availability guarantees to software application users. Application vendors can take advantage of VM technology to build reliability into their solutions by creating multiple images (or copies) of the software application running synchronously, but independently of one another. These images can run on the same physical device, e.g., a general purpose application server, or within multiple, decoupled VM containers, or they can be developed across multiple physical computers in decoupled VM containers. Multiple VM replications schemes exists, but in general, VM solutions have a primary software image that delivers software services for users and then a secondary or tertiary backup image at a standby server that can take over for the primary in the event of a failure. The backup images are generally synchronized at discrete time intervals to update the data structures and database of the backup servers to track changes that have taken place since the last time the data synchronization update took place. The synchronization is referred to as “commit” and these solutions provide dramatic improvements in the ability for a software application vendor to guarantee that its users will receive reliable access to the software application services.
In a high availability environments, a primary (active) and secondary (passive) systems work together to ensure synchronization of states either in tight lock step, such as tandem and stratus fault-tolerant systems, or loose-lock step, such as less expensive clusters. Whenever there is a state change at some level of the system, the primary sends the summary state to the secondary which adjusts its state to synchronize with the primary using the summary state. When the primary fails before being able to transmit any information it has accumulated since the last checkpointing, that information is usually locally replayed by the secondary based on the date it is received and tries to synchronize itself before taking over as primary.